#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    // 下面的代码体现进程等待的意义
    // 以及waitpid函数的使用
    /* 主要功能就是子进程退出的时候返回一个进程退出码0，但是此时父进程在执行sleep函数
无法回收处于Z状态的子进程，而后waitpid函数就会回收子进程资源*/
    pid_t id = fork();
    if(id == 0)
    {
        // 子进程
        int cnt = 5;
        while(cnt)
        {
            printf("子进程pid:%d, 父进程pid:%d, cnt:%d\n", getpid(), getppid(), cnt--);
            sleep(1);
        }
        //int a = 1;
        //a/=0;
        exit(10);    
    }

    // 父进程
    sleep(10);
    int status = 0; //status不是被整体使用的，它有位图结构
    pid_t ret = waitpid(id, &status, 0); // 这里的id其实就是父进程的pid
    if(id > 0)
    {
        // status的用法要根据其位图结构来使用
        printf("wait success: %d, sign number: %d, child exit code: %d\n", ret, (status & 0x7F), (status >> 8) & 0xFF); 
    }
    
    sleep(2);
    return 0;
}
